<?php
namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Admin\CateController;
use DB;
class GoodsController extends Controller
{
    //商品添加页面显示
    public function getAdd()
    {   
        $data = CateController::getCate();
        return view('admin.goods.add',['data'=>$data]);
    }
    //商品列表控制功能
    public function getList(Request $request){
        $count = $request ->input('count',10);
        $search = $request->input('search','');

        $data = DB::table('tbl_goods') -> where('goodsname','like','%'.$search.'%') ->paginate($count);
        return view('admin.goods.list',['data'=>$data,'request'=>$request->all()]);


    }
    //商品添加控制方法
    public function postDoadd(Request $request)
    {
       $data = $request -> all();

       //先进行上传图片的处理 缩放 160*160
       if(!empty($data['goodspic'])){
       
        //获取上传文件的后缀
        $ext = $request -> file('goodspic') -> getClientOriginalExtension();
        //随机生成一个文件前缀名字
        $filename = date('Ymd',time()).mt_rand(10000,99999);
        //前缀后缀拼接成最后新的文件名称
        $newfilename = $filename.'.'.$ext;
        //上传文件到指定目录
        $request -> file('goodspic') -> move('home_assoc/images/',$newfilename);
        //获取上传文件的长宽
        $arr = getimagesize('home_assoc/images/'.$newfilename);
        $width = $arr[0];
        $height = $arr[1];
        //根据指定大小来进行缩放处理
        self::suofang('home_assoc/images/'.$newfilename,160,160,$pre = 'goodspic_');
        //缩放完成后删除上传的原图片
        unlink('home_assoc/images/'.$newfilename);
        //最后需要存储到数据库的图片名字
        $goodspic = 'goodspic_'.$newfilename;

       }else{
            $goodspic = 'default.jpg';
       }
       $data = $request -> except('_token');
       //去除分类两边的定义字符
       $a = $data['goodstype'];
       $b = trim($a,'|----');
       $data['goodspic'] = $goodspic;
       $data['goodstime'] = date('Y-m-d H:i:s',time());
       //将需要的数据插入数据库
       $res = DB::table('tbl_goods') -> insert(
            ['goodstype'=>$b,
            'goodsname'=>$data['goodsname'],
            'goodsprice'=>$data['goodsprice'],
            'goodsdes'=>$data['goodsdes'],
            'goodstime'=>$data['goodstime'],
            'goodspic'=>$data['goodspic'],
            ]
        );
       //验证必填选项
       $this->validate($request, [
        'goodsname' => 'required',
         'goodstype' => 'required',
        'goodsprice' => 'required',
        'goodsdes' => 'required',
        'goodspic' => 'required',
        ],[
        'goodsname.required'=>'商品名称不能为空',
        'goodstype.required'=>'商品类别不能为空',
        'goodsprice.required'=>'商品价格不能为空',
        'goodsdes.required'=>'商品描述不能为空',
        'goodspic.required'=>'商品展示图片不能为空',

        ]);

       //进行判断 如果插入成功则进入到列表查看；如果失败则回到之前界面
       if($res){
            return redirect('/admin/goods/list')->with('success','添加成功');
       }else{
            return back()->with('error','添加失败');
       }
    }
    //商品删除功能控制
    public function getDelete($id){
         $res = DB::table('tbl_goods')->where('id',$id)->delete();
         if($res){
             return redirect('/admin/goods/list')->with('success','删除成功');
         }else{
             return redirect('/admin/goods/list')->with('error','删除失败');
         }
    }
    public function getEdit($id){
       $typedata = CateController::getCate();
       $data = DB::table('tbl_goods') -> where('id',$id)->first();
       //因为存入数据库的没有|----所以需要拼接然后做下拉列表比对
       $data['goodstype'] = '|----'.$data['goodstype'];
       return view('admin.goods.update',['data'=>$data,'typedata'=>$typedata]);
    }
    //修改信息更改控制
    public function postUpdate(Request $request)
    {

        $data = $request -> all();
       //先判断图片是否上传 进行上传图片的处理 缩放 160*160
       if(!empty($data['goodspic'])){
            //获取上传文件的后缀
            $ext = $request -> file('goodspic') -> getClientOriginalExtension();
            //随机生成一个文件前缀名字
            $filename = date('Ymd',time()).mt_rand(10000,99999);
            //前缀后缀拼接成最后新的文件名称
            $newfilename = $filename.'.'.$ext;
            //上传文件到指定目录
            $request -> file('goodspic') -> move('home_assoc/images/',$newfilename);
            //获取上传文件的长宽
            $arr = getimagesize('home_assoc/images/'.$newfilename);
            $width = $arr[0];
            $height = $arr[1];
            //根据指定大小来进行缩放处理
            self::suofang('home_assoc/images/'.$newfilename,160,160,$pre = 'goodspic_');
            //缩放完成后删除上传的原图片
            unlink('home_assoc/images/'.$newfilename);
            //最后需要存储到数据库的图片名字
            $goodspic = 'goodspic_'.$newfilename;
           }else{
            //将为对应的数据库图片查询出来
                $s = DB::table('tbl_goods')
                            ->where('id',$data['id'])
                            ->first();
                $goodspic = $s['goodspic'];
           }
           $a = $data['goodstype'];
           $b = trim($a,'|----');
           $data['goodspic'] = $goodspic;
           $data['goodstime'] = date('Y-m-d H:i:s',time());
           //将接受到的的数据修改进数据库
           $res = DB::table('tbl_goods')
                ->where('id',$data['id'])
                ->update(
                        [
                            'goodstype'=>$b,
                            'goodsname'=>$data['goodsname'],
                            'goodsprice'=>$data['goodsprice'],
                            'goodspic'=>$data['goodspic'],
                            'goodsnum'=>$data['goodsnum'],
                            'goodsdes'=>$data['goodsdes'],
                            'goodstime'=>$data['goodstime'],
                            'goodsstatus'=>$data['goodsstatus']

                        ]
                    );
       //进行判断 如果插入成功则进入到列表查看；如果失败则回到之前界面
       if($res){
            return redirect('/admin/goods/list')->with('success','更新成功');
       }else{
            return back()->with('error','更新失败');
       }
    }



    /**
     * 等比缩放函数（以保存的方式实现）
     * @param string $picname 被缩放的处理图片源
     * @param int $maxx 缩放后图片的最大宽度
     * @param int $maxy 缩放后图片的最大高度
     * @param string $pre 缩放后图片名的前缀名
     * @return String 返回后的图片名称(带路径)；
     */
    static function suofang($picname,$maxx=126,$maxy=66,$pre="pic_")
    {
        $info = getimageSize($picname); //获取图片的基本信息
    
        $w = $info[0];//获取宽度
        $h = $info[1];//获取高度
        
        //获取图片的类型并为此创建对应图片资源    
        switch($info[2]){
            case 1: //gif
                $im = imagecreatefromgif($picname);
                break;
            case 2: //jpg
                $im = imagecreatefromjpeg($picname);
                break;
            case 3: //png
                $im = imagecreatefrompng($picname);
                break;
            default:
                die("图片类型错误！");
        }
        
        //计算缩放比例
            if(($maxx/$w)>($maxy/$h)){
                $b = $maxy/$h;
            }else{
                $b = $maxx/$w;
            }
        
        //计算出缩放后的尺寸
            $nw = floor($w*$b);
            $nh = floor($h*$b);
            
            //创建一个新的图像源(目标图像)
            $nim = imagecreatetruecolor($nw,$nh);
                
            //执行等比缩放
            imagecopyresampled($nim,$im,0,0,0,0,$nw,$nh,$w,$h);
            
            //输出图像（根据源图像的类型，输出为对应的类型）
            $picinfo = pathinfo($picname);//解析源图像的名字和路径信息
            $newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
            switch($info[2]){
                case 1:
                    imagegif($nim,$newpicname);
                    break;
                case 2:
                    imagejpeg($nim,$newpicname);
                    break;
                case 3:
                    imagepng($nim,$newpicname);
                    break;
        }
            //释放图片资源
            imagedestroy($im);
            imagedestroy($nim);
            //返回结果
            return $newpicname;
    }

}
